1 module kprop.helper.prettyjson; 2 import std.json; 3 import std.range:repeat; 4 import std.conv:to; 5 6 /** 7 Laeeth Isharc / Kaleidic Associates 2015 8 9 Pretty printer for JSON (D Programming Language) 10 */ 11 12 string prettyPrint(JSONValue json, int indentLevel=0, string prefix="") 13 { 14 import std.range:appender; 15 auto ret=appender!string; 16 ret.put('\t'.repeat(indentLevel)); 17 ret.put(prefix); 18 //ret.put(' '.repeat(indentLevel*8)); 19 final switch(json.type) with(JSON_TYPE) 20 { 21 case NULL: 22 ret.put("<null>\n"); 23 return ret.data; 24 case STRING: 25 ret.put(json.str~"\n"); 26 return ret.data; 27 case INTEGER: 28 ret.put(json.integer.to!string~"\n"); 29 return ret.data; 30 case UINTEGER: 31 ret.put(json.uinteger.to!string~"\n"); 32 return ret.data; 33 case FLOAT: 34 ret.put(json.floating.to!string~"\n"); 35 return ret.data; 36 case TRUE: 37 ret.put("true\n"); 38 return ret.data; 39 case FALSE: 40 ret.put("false\n"); 41 return ret.data; 42 case OBJECT: 43 ret.put("{\n"); 44 foreach(key,value;json.object) 45 ret.put(value.prettyPrint(indentLevel+1,key~" : ")); 46 ret.put('\t'.repeat(indentLevel)); 47 ret.put("}\n"); 48 return ret.data; 49 case ARRAY: 50 ret.put("[\n"); 51 foreach(key;json.array) 52 ret.put(prettyPrint(key,indentLevel+1)); 53 ret.put('\t'.repeat(indentLevel)); 54 ret.put("]\n"); 55 return ret.data; 56 } 57 assert(0); 58 } 59